﻿using System;
using biz.ritter.javapi.lang;
using biz.ritter.javapi.lang.reflect;
using Nofs.Net.Common.Interfaces.Library;

namespace Nofs.Net.nofs.metadata.interfaces
{
    public interface IAttributeAccessor
    {
        Class GetInnerCollectionType(Method method);//throws Exception;
        Class GetInnerCollectionType(Object sender);//throws Exception;
        bool isExecutable(Method method);//throws Exception;
        bool isFSRoot(Method method);//throws Exception;
        bool isFSRoot(Object sender);//throws Exception;
        bool isFolderObject(Method method);//throws Exception;
        bool isDomainObject(Method method);//throws Exception;
        bool isFolderObject(Class type);//throws Exception;
        bool isFolderObject(Object obj);//throws Exception;
        bool isFolderObject(Class type, bool strict);//throws Exception;
        bool isFolderObject(Object obj, bool strict);//throws Exception;
        bool isDomainObject(Object obj);//throws Exception;
        bool isDomainObject(Class cls);//throws Exception;
        Class FindObjectTypeToCreateForMknod(Object obj);//throws Exception;
        Class FindObjectTypeToCreateForMkDir(Object obj);//throws Exception;
        Class FindObjectTypeToCreateForMknod(Object obj, Method method);//throws Exception;
        Class FindObjectTypeToCreateForMkDir(Object obj, Method method);//throws Exception;
        IFolderObjectProperties GetFolderObject(Object obj);//throws Exception;
        IFolderObjectProperties GetFolderObject(Method method);//throws Exception;
        IDomainObjectProperties GetDomainObject(Object obj);//throws Exception;
        IDomainObjectProperties GetDomainObject(Method method);//throws Exception;
        void setContainerIfAttributeExists(Object obj, IDomainObjectContainer container);// throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, Exception;
        void setContainerManagerIfAttributeExists(Object obj, IDomainObjectContainerManager manager);// throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, Exception;
        String getNameFromObject(Object obj);// throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, Exception;
        bool canSetNameForObject(Object obj);//throws Exception;
        void setNameForObject(Object obj, String name);// throws IllegalArgumentException, IllegalAccessException, InvocationTargetException, Exception;

        bool HasAnyCustomMetadataManagement(Object obj);//throws Exception;
        IGetterSetterPair GetLastAccessTimePair(Object obj);//throws Exception;
        IGetterSetterPair GetLastModifiedTimePair(Object obj);//throws Exception;
        IGetterSetterPair GetCreateTimePair(Object obj);//throws Exception;
        IGetterSetterPair GetModePair(Object obj);//throws Exception;
        IGetterSetterPair GetUIDPair(Object obj);//throws Exception;
        IGetterSetterPair GetGIDPair(Object obj);//throws Exception;
    }
}
